/**
 * 在这里定义和用户相关的路由处理函数，供/router/user.js模块调用
 */

// 导入数据库模块
const db = require('../db/index')
// 导入bcryptjs
const bcrypt = require('bcryptjs')
// 用来生成token字符串
const jwt = require('jsonwebtoken')

// 导入配置文件
const config = require('../config')

// 注册用户的处理函数
exports.regUser = (req, res)=>{
    // 接收表单数据
    const userInfo = req.body
    // 判断数据是否合法
    // if (!userInfo.username || !userInfo.password){
    //     return res.cc('用户名或密码不能为空！')
    //     // return res.send({status: 1, message: '用户名或密码不能为空！'})
    // }

    // 定义SQL语句查询用户名是否被占用
    const sqlStr = 'select * from ev_users where username = ?'
    db.query(sqlStr, userInfo.username, (err, results)=>{
        if(err){
            return res.cc(err)
            // return res.send({status: 1, message: err.message})
        }
        // 判断用户名是否被占用
        if(results.length > 0){
            return res.cc('用户名被占用，请更换其他用户名！')
            // return res.send({status: 1, message: 用户名被占用，请更换其他用户名！'})
        }
        // 对用户的密码进行加密操作: 调用bcrypt.hashSync()函数
        userInfo.password = bcrypt.hashSync(userInfo.password, 10)
        // 插入新用户
        const insertSql = 'insert into ev_users set ?'
        db.query(insertSql, {username: userInfo.username, password: userInfo.password}, (err, results)=>{
            // 执行 SQL 语句失败
            if(err){
                return res.cc(err)
                // return res.send({status: 1, message: err.message})
            }
            if(results.affectedRows !== 1){
                return res.cc('注册用户失败，请稍后重试！')
                // return res.send({status: 1, message: '注册用户失败，请稍后重试！'})
            }
            // 注册成功
            res.cc('注册成功！', 0)
            // res.send({status: 0, message: '注册成功！'})
        })
    })

}

// 登录的处理函数
exports.login = (req, res)=>{
    // 接收表单的数据
    const userInfo = req.body
    const sqlStr = 'select * from ev_users where username = ?'
    db.query(sqlStr, userInfo.username, (err, results)=>{
        if(err) return res.cc(err)
        if(results.length !== 1) return res.cc('登录失败,用户名错误！')
        // 判断密码是否正确
        const compareResult = bcrypt.compareSync(userInfo.password, results[0].password)
        if(!compareResult){
            return res.cc('登录失败,密码错误')
        }
        // 生成JWT的Token字符串
        const user = {...results[0], password: '', user_pic: ''}
        // 生成Token字符串
        const tokenStr = jwt.sign(user, config.jwtSecretKey, {
            expiresIn: config.expiresIn
        })
        // 给客户端响应token
        res.send({
            status: 0,
            message: '登录成功！',
            //为了方便客户端使用token，在服务器端直接拼接上Bearer 的前缀
            token: 'Bearer ' + tokenStr
        })


    })

    // res.send('Login Ok')
}